package com.draven.service;

import com.draven.entity.FileInfo;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 文件服务接口
 */
public interface FileService {

    /**
     * 上传文件
     * @param file 文件
     * @param userId 用户ID
     * @param categoryId 分类ID
     * @param isPublic 是否公开
     * @return 文件信息
     */
    FileInfo uploadFile(MultipartFile file, Long userId, Long categoryId, Integer isPublic);

    /**
     * 批量上传文件
     * @param files 文件列表
     * @param userId 用户ID
     * @param categoryId 分类ID
     * @param isPublic 是否公开
     * @return 文件信息列表
     */
    List<FileInfo> batchUploadFiles(MultipartFile[] files, Long userId, Long categoryId, Integer isPublic);

    /**
     * 下载文件
     * @param id 文件ID
     * @param userId 用户ID
     * @param response HTTP响应
     */
    void downloadFile(Long id, Long userId, HttpServletResponse response);

    /**
     * 预览文件
     * @param id 文件ID
     * @param userId 用户ID
     * @param response HTTP响应
     */
    void previewFile(Long id, Long userId, HttpServletResponse response);

    /**
     * 获取文件信息
     * @param id 文件ID
     * @param userId 用户ID
     * @return 文件信息
     */
    FileInfo getFileInfo(Long id, Long userId);

    /**
     * 删除文件
     * @param id 文件ID
     * @param userId 用户ID
     * @return 是否删除成功
     */
    boolean deleteFile(Long id, Long userId);

    /**
     * 批量删除文件
     * @param ids 文件ID列表
     * @param userId 用户ID
     * @return 删除成功的文件ID列表
     */
    List<Long> batchDeleteFiles(List<Long> ids, Long userId);

    /**
     * 获取用户的文件列表
     * @param userId 用户ID
     * @param categoryId 分类ID
     * @param fileType 文件类型
     * @param keyword 关键词
     * @return 文件列表
     */
    List<FileInfo> getFileList(Long userId, Long categoryId, String fileType, String keyword);

    /**
     * 更新文件信息
     * @param fileInfo 文件信息
     * @return 是否更新成功
     */
    boolean updateFileInfo(FileInfo fileInfo);

    /**
     * 获取文件统计信息
     * @param userId 用户ID
     * @return 统计信息
     */
    Map<String, Object> getFileStats(Long userId);
} 